/**
 * 题目: 整数反转
 * 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
 * 如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。
 * 假设环境不允许存储 64 位整数（有符号或无符号）。
 */

/**
 * 这题主要是找规律, 然后往后反转, 可以是直接按照数字来慢慢求的每一位数, 我是按耐不住性子, 直接把他转化为字符数组
 * 然后直接拼接的, 这里要注意后面连续为零的情况, 还有第一个符号为 '-' 的情况,
 * 还要注意越界的情况, 因为正着可能不越界, 反着会越界的情况, 处理好这几种情况就可以直接开写了
 */

public class Main {
    public int reverse(int x) {

        // 转化为字符串, 投个懒直接加个 ""
        String s = x + "";


        int n = s.length();

        // 定义字符串拼接函数
        StringBuffer ret = new StringBuffer();

        //定义long 类型的变量来判断是否会越界, 因为咋写的方式是一步到胃的
        // 如果中途越界了没法得到后面的值, 所以要定义一个long 类型来接收数据
        // 如果大于 Integer.MAX_VALUE, 那么返回 0, 否则转化 int类型返回
        long num = 0;

        // 排除末尾的零
        while (s.charAt(n - 1) == 0) {
            n--;
        }

        // 将除了第一位的倒转过来
        for (int i = n - 1; i > 0; i--) {
            ret.append(s.charAt(i));
        }

        // 判断第一位是否为负数
        if (s.charAt(0) != '-') {

            // 不是负数
            ret.append(s.charAt(0));
            num = Long.parseLong(ret.toString());

            // 判断是否越界
            return num > Integer.MAX_VALUE ? 0 : (int) num;

        } else {

            num = Long.parseLong(ret.toString());

            // 是负数在结尾乘以 -1
            return (num > Integer.MAX_VALUE ? 0 : (int) num) * -1;
        }
    }

    public static void main(String[] args) {
        LeetCode7 l = new LeetCode7();
        System.out.println(l.reverse(1534236469));
    }
}
